package com.fjnu.springmvc.config;

import lombok.extern.slf4j.Slf4j;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@Slf4j
public class SensitiveWordFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        // 在过滤器初始化时执行的逻辑（可选）
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");

        // 在这里实现敏感词过滤逻辑
        // 你可以从 request 中获取参数或请求内容，然后进行敏感词过滤

        // 示例：替换请求参数中的敏感词为星号
        String originalContent = request.getParameter("name");
        log.info("SensitiveWordFilter:name:" + originalContent);
        if(originalContent != null){

            String filteredContent = filterSensitiveWords(originalContent);
            // 可以将过滤后的内容设置回请求
            request.setAttribute("name", filteredContent);
        }


        // 继续执行过滤器链
        chain.doFilter(request, response);
    }

    @Override
    public void destroy() {
        // 在过滤器销毁时执行的逻辑（可选）
    }

    // 实现敏感词过滤逻辑
    private String filterSensitiveWords(String content) {
        // 在这里实现具体的敏感词过滤算法
        // 可以使用正则表达式、Trie 树等数据结构来实现

        // 这里只是简单示例，将敏感词替换为星号
        String sensitiveWord1 = "fuck";
        String sensitiveWord2 = "shit";

        String filteredContent = content
                .replace(sensitiveWord1, "***")
                .replace(sensitiveWord2, "***");

        return filteredContent;
    }
}
